bitkeeper revision 1.825.3.21 (406bdf6e4yUNbgx_RSShBfyJ0ZlFdA)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Thu, 1 Apr 2004 09:22:54 +0000 (09:22 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Thu, 1 Apr 2004 09:22:54 +0000 (09:22 +0000)
system.h:
  Extra compiler barriers in upcall code.

xenolinux-2.4.25-sparse/include/asm-xen/system.h

index 86d6c7b150ae528dcdf4a052dfdb074fc64f3739..40e11d3e689bcd20cb8d97959b5e3b574cff9e9d 100644 (file)
@@ -321,6 +321,7 @@ do {                                                                          \
     shared_info_t *_shared = HYPERVISOR_shared_info;                          \
     barrier();                                                                \
     _shared->vcpu_data[0].evtchn_upcall_mask = 0;                             \
+    barrier(); /* unmask then check (avoid races) */                          \
     if ( unlikely(_shared->vcpu_data[0].evtchn_upcall_pending) )              \
         evtchn_do_upcall(NULL);                                               \
 } while (0)
@@ -334,9 +335,11 @@ do {                                                                          \
 do {                                                                          \
     shared_info_t *_shared = HYPERVISOR_shared_info;                          \
     barrier();                                                                \
-    if ( (_shared->vcpu_data[0].evtchn_upcall_mask = x) == 0 )                \
+    if ( (_shared->vcpu_data[0].evtchn_upcall_mask = x) == 0 ) {              \
+        barrier(); /* unmask then check (avoid races) */                      \
         if ( unlikely(_shared->vcpu_data[0].evtchn_upcall_pending) )          \
             evtchn_do_upcall(NULL);                                           \
+    }                                                                         \
 } while (0)
 
 #define __save_and_cli(x)                                                     \